package com.ruoyi.shop.service;

import java.net.UnknownHostException;
import java.text.ParseException;
import java.util.List;

import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.shop.domain.ShopPaymentRecord;
import com.ruoyi.shop.domain.ShopUserOrder;

/**
 * 支付记录Service接口
 * 
 * @author Alan Zhang
 * @date 2021-09-14
 */
public interface IShopPaymentRecordService 
{
    /**
     * 查询支付记录
     * 
     * @param id 支付记录主键
     * @return 支付记录
     */
    public ShopPaymentRecord selectShopPaymentRecordById(Long id);

    /**
     * 查询支付记录列表
     * 
     * @param shopPaymentRecord 支付记录
     * @return 支付记录集合
     */
    public List<ShopPaymentRecord> selectShopPaymentRecordList(ShopPaymentRecord shopPaymentRecord);

    /**
     * 新增支付记录
     * 
     * @param shopPaymentRecord 支付记录
     * @return 结果
     */
    public int insertShopPaymentRecord(ShopPaymentRecord shopPaymentRecord);

    /**
     * 修改支付记录
     * 
     * @param shopPaymentRecord 支付记录
     * @return 结果
     */
    public int updateShopPaymentRecord(ShopPaymentRecord shopPaymentRecord);

    /**
     * 批量删除支付记录
     * 
     * @param ids 需要删除的支付记录主键集合
     * @return 结果
     */
    public int deleteShopPaymentRecordByIds(String ids);

    /**
     * 删除支付记录信息
     * 
     * @param id 支付记录主键
     * @return 结果
     */
    public int deleteShopPaymentRecordById(Long id);

    /**
     *  支付记录
     * @param trxNo 交易订单号
     * @return
     */
    public ShopPaymentRecord findByTrxNo(String trxNo);

    /**
     * 支付前 生成交易记录
     * @param userOrder
     * @param payType
     * @return
     * @throws UnknownHostException
     */
    public ShopPaymentRecord genPayOrder(ShopUserOrder userOrder, String payType) throws UnknownHostException;

    /**
     * 支付成功
     * @param notifyResult 通知结果
     */
    public void paySuccess(WxPayOrderNotifyResult notifyResult);

    /**
     * 支付成功
     * @param orderQueryResult 查询结果
     */
    public void paySuccess(WxPayOrderQueryResult orderQueryResult);

    /**
     * 支付失败
     * @param notifyResult 通知结果
     */
    public AjaxResult payFail(WxPayOrderNotifyResult notifyResult);
}
